home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Dev / SpeakFreely_Src / gsm / src / gsm_encode.c < prev    next >
C/C++ Source or Header  |  2000-05-27  |  5KB  |  208 lines

  1. /*
  2.  * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
  3.  * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
  4.  * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
  5.  */
  6.  
  7. /* $Header: /home/kbs/jutta/src/gsm/gsm-1.0/src/RCS/gsm_encode.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */
  8.  
  9. #include "private.h"
  10. #include "gsm.h"
  11. #include "proto.h"
  12.  
  13. void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c)
  14. {
  15.     word         LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
  16.  
  17.     Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
  18.  
  19.  
  20.     /*    variable    size
  21.  
  22.         GSM_MAGIC    4
  23.  
  24.         LARc[0]        6
  25.         LARc[1]        6
  26.         LARc[2]        5
  27.         LARc[3]        5
  28.         LARc[4]        4
  29.         LARc[5]        4
  30.         LARc[6]        3
  31.         LARc[7]        3
  32.  
  33.         Nc[0]        7
  34.         bc[0]        2
  35.         Mc[0]        2
  36.         xmaxc[0]    6
  37.         xmc[0]        3
  38.         xmc[1]        3
  39.         xmc[2]        3
  40.         xmc[3]        3
  41.         xmc[4]        3
  42.         xmc[5]        3
  43.         xmc[6]        3
  44.         xmc[7]        3
  45.         xmc[8]        3
  46.         xmc[9]        3
  47.         xmc[10]        3
  48.         xmc[11]        3
  49.         xmc[12]        3
  50.  
  51.         Nc[1]        7
  52.         bc[1]        2
  53.         Mc[1]        2
  54.         xmaxc[1]    6
  55.         xmc[13]        3
  56.         xmc[14]        3
  57.         xmc[15]        3
  58.         xmc[16]        3
  59.         xmc[17]        3
  60.         xmc[18]        3
  61.         xmc[19]        3
  62.         xmc[20]        3
  63.         xmc[21]        3
  64.         xmc[22]        3
  65.         xmc[23]        3
  66.         xmc[24]        3
  67.         xmc[25]        3
  68.  
  69.         Nc[2]        7
  70.         bc[2]        2
  71.         Mc[2]        2
  72.         xmaxc[2]    6
  73.         xmc[26]        3
  74.         xmc[27]        3
  75.         xmc[28]        3
  76.         xmc[29]        3
  77.         xmc[30]        3
  78.         xmc[31]        3
  79.         xmc[32]        3
  80.         xmc[33]        3
  81.         xmc[34]        3
  82.         xmc[35]        3
  83.         xmc[36]        3
  84.         xmc[37]        3
  85.         xmc[38]        3
  86.  
  87.         Nc[3]        7
  88.         bc[3]        2
  89.         Mc[3]        2
  90.         xmaxc[3]    6
  91.         xmc[39]        3
  92.         xmc[40]        3
  93.         xmc[41]        3
  94.         xmc[42]        3
  95.         xmc[43]        3
  96.         xmc[44]        3
  97.         xmc[45]        3
  98.         xmc[46]        3
  99.         xmc[47]        3
  100.         xmc[48]        3
  101.         xmc[49]        3
  102.         xmc[50]        3
  103.         xmc[51]        3
  104.     */
  105.  
  106.  
  107.     *c++ =   ((GSM_MAGIC & 0xF) << 4)        /* 1 */
  108.            | ((LARc[0] >> 2) & 0xF);
  109.     *c++ =   ((LARc[0] & 0x3) << 6)
  110.            | (LARc[1] & 0x3F);
  111.     *c++ =   ((LARc[2] & 0x1F) << 3)
  112.            | ((LARc[3] >> 2) & 0x7);
  113.     *c++ =   ((LARc[3] & 0x3) << 6)
  114.            | ((LARc[4] & 0xF) << 2)
  115.            | ((LARc[5] >> 2) & 0x3);
  116.     *c++ =   ((LARc[5] & 0x3) << 6)
  117.            | ((LARc[6] & 0x7) << 3)
  118.            | (LARc[7] & 0x7);
  119.     *c++ =   ((Nc[0] & 0x7F) << 1)
  120.            | ((bc[0] >> 1) & 0x1);
  121.     *c++ =   ((bc[0] & 0x1) << 7)
  122.            | ((Mc[0] & 0x3) << 5)
  123.            | ((xmaxc[0] >> 1) & 0x1F);
  124.     *c++ =   ((xmaxc[0] & 0x1) << 7)
  125.            | ((xmc[0] & 0x7) << 4)
  126.            | ((xmc[1] & 0x7) << 1)
  127.            | ((xmc[2] >> 2) & 0x1);
  128.     *c++ =   ((xmc[2] & 0x3) << 6)
  129.            | ((xmc[3] & 0x7) << 3)
  130.            | (xmc[4] & 0x7);
  131.     *c++ =   ((xmc[5] & 0x7) << 5)            /* 10 */
  132.            | ((xmc[6] & 0x7) << 2)
  133.            | ((xmc[7] >> 1) & 0x3);
  134.     *c++ =   ((xmc[7] & 0x1) << 7)
  135.            | ((xmc[8] & 0x7) << 4)
  136.            | ((xmc[9] & 0x7) << 1)
  137.            | ((xmc[10] >> 2) & 0x1);
  138.     *c++ =   ((xmc[10] & 0x3) << 6)
  139.            | ((xmc[11] & 0x7) << 3)
  140.            | (xmc[12] & 0x7);
  141.     *c++ =   ((Nc[1] & 0x7F) << 1)
  142.            | ((bc[1] >> 1) & 0x1);
  143.     *c++ =   ((bc[1] & 0x1) << 7)
  144.            | ((Mc[1] & 0x3) << 5)
  145.            | ((xmaxc[1] >> 1) & 0x1F);
  146.     *c++ =   ((xmaxc[1] & 0x1) << 7)
  147.            | ((xmc[13] & 0x7) << 4)
  148.            | ((xmc[14] & 0x7) << 1)
  149.            | ((xmc[15] >> 2) & 0x1);
  150.     *c++ =   ((xmc[15] & 0x3) << 6)
  151.            | ((xmc[16] & 0x7) << 3)
  152.            | (xmc[17] & 0x7);
  153.     *c++ =   ((xmc[18] & 0x7) << 5)
  154.            | ((xmc[19] & 0x7) << 2)
  155.            | ((xmc[20] >> 1) & 0x3);
  156.     *c++ =   ((xmc[20] & 0x1) << 7)
  157.            | ((xmc[21] & 0x7) << 4)
  158.            | ((xmc[22] & 0x7) << 1)
  159.            | ((xmc[23] >> 2) & 0x1);
  160.     *c++ =   ((xmc[23] & 0x3) << 6)
  161.            | ((xmc[24] & 0x7) << 3)
  162.            | (xmc[25] & 0x7);
  163.     *c++ =   ((Nc[2] & 0x7F) << 1)            /* 20 */
  164.            | ((bc[2] >> 1) & 0x1);
  165.     *c++ =   ((bc[2] & 0x1) << 7)
  166.            | ((Mc[2] & 0x3) << 5)
  167.            | ((xmaxc[2] >> 1) & 0x1F);
  168.     *c++ =   ((xmaxc[2] & 0x1) << 7)
  169.            | ((xmc[26] & 0x7) << 4)
  170.            | ((xmc[27] & 0x7) << 1)
  171.            | ((xmc[28] >> 2) & 0x1);
  172.     *c++ =   ((xmc[28] & 0x3) << 6)
  173.            | ((xmc[29] & 0x7) << 3)
  174.            | (xmc[30] & 0x7);
  175.     *c++ =   ((xmc[31] & 0x7) << 5)
  176.            | ((xmc[32] & 0x7) << 2)
  177.            | ((xmc[33] >> 1) & 0x3);
  178.     *c++ =   ((xmc[33] & 0x1) << 7)
  179.            | ((xmc[34] & 0x7) << 4)
  180.            | ((xmc[35] & 0x7) << 1)
  181.            | ((xmc[36] >> 2) & 0x1);
  182.     *c++ =   ((xmc[36] & 0x3) << 6)
  183.            | ((xmc[37] & 0x7) << 3)
  184.            | (xmc[38] & 0x7);
  185.     *c++ =   ((Nc[3] & 0x7F) << 1)
  186.            | ((bc[3] >> 1) & 0x1);
  187.     *c++ =   ((bc[3] & 0x1) << 7)
  188.            | ((Mc[3] & 0x3) << 5)
  189.            | ((xmaxc[3] >> 1) & 0x1F);
  190.     *c++ =   ((xmaxc[3] & 0x1) << 7)
  191.            | ((xmc[39] & 0x7) << 4)
  192.            | ((xmc[40] & 0x7) << 1)
  193.            | ((xmc[41] >> 2) & 0x1);
  194.     *c++ =   ((xmc[41] & 0x3) << 6)            /* 30 */
  195.            | ((xmc[42] & 0x7) << 3)
  196.            | (xmc[43] & 0x7);
  197.     *c++ =   ((xmc[44] & 0x7) << 5)
  198.            | ((xmc[45] & 0x7) << 2)
  199.            | ((xmc[46] >> 1) & 0x3);
  200.     *c++ =   ((xmc[46] & 0x1) << 7)
  201.            | ((xmc[47] & 0x7) << 4)
  202.            | ((xmc[48] & 0x7) << 1)
  203.            | ((xmc[49] >> 2) & 0x1);
  204.     *c++ =   ((xmc[49] & 0x3) << 6)
  205.            | ((xmc[50] & 0x7) << 3)
  206.            | (xmc[51] & 0x7);
  207. }
  208.